package pre.dao;

import java.sql.SQLException;
import java.util.ArrayList;

import javax.annotation.Resource;

import org.springframework.orm.ibatis.SqlMapClientTemplate;
import org.springframework.stereotype.Repository;
import pre.vo.UserVO;

/**
 * Spring 의 iBatis 연동 지원을 Annotation을 사용하여 구현한 DAO클래스
 * 
 * <p>
 * <b>NOTE</b>: UserVO를 이용한 CRUD를 iBatis의 메소드를 사용해 구현한
 * 
 * @see <pre>
 *  == 개정이력(Modification Information) ==
 *   
 *   수정일      	수정자         수정내용
 *  -------    	--------    ---------------------------
 *  2013.04		이정현         최초 생성
 *	2013.07.13	이기성		iBatis의 SqlMapClientTemplate를 사용해 각 메소드 수정 
 * </pre>
 */
@Repository("userDAO")
public class UserDAO {
	
	//@Resource : 의존성 주입 어노테이션의 일종으로 name 속성에 자동으로 연결할 빈 객체의 이름을 입력
	@Resource(name = "sqlMapClientTemplate")
	private SqlMapClientTemplate sqlmap;
	
	/** 기능 : 아이디 값으로 해당 아이디를 가진 회원 정보를 조회*/
	public UserVO selectUserById(String id) {
		return (UserVO)sqlmap.queryForObject("user.selectUserById", id);

	}
	
	/** 기능 : 모든 회원 정보 조회 */
	/*
	 * @SuppressWarning : 컴파일러가 경고하는 내용 중에 제외시킬 내용을 설정할때 사용
	 */	
	@SuppressWarnings("unchecked")
	public ArrayList<UserVO> selectUserList(){
		return (ArrayList<UserVO>)sqlmap.queryForList("user.selectUserList");
	}

	/** 기능 : 입력한 회원 정보를 테이블에 저장	 */
	public void registerUser(UserVO userVo) throws SQLException{
		sqlmap.insert("user.registerUser",userVo);
	}

	/** 기능 : 해당 아이디를 가진 회원의 정보를 갱신 후 갱신된 회원 정보를 출력*/
	public UserVO updateUser(UserVO userVo) throws SQLException {
		sqlmap.update("user.updateUser", userVo);
		return selectUserById(userVo.getId());
	}

	/** 기능 : 해당 아이디를 가진 회원을 테이블에서 삭제*/
	public void deleteUser(String id) throws SQLException{
		sqlmap.delete("user.deleteUser", id);
	}
	

	
	
}
